import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
import os

# 创建图片保存目录
os.makedirs('output', exist_ok=True)

# 设置中文字体
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False

# 读取数据
data = pd.read_excel('FhjlViewDD.xlsx')
data['创建时间'] = pd.to_datetime(data['创建时间'])

# 任务a: 矿粉货运量日趋势
june_mineral = data[(data['创建时间'].dt.month == 6) & (data['货品'] == '矿粉')]
daily_mineral = june_mineral.groupby(june_mineral['创建时间'].dt.date)['净重'].sum()
plt.figure(figsize=(12, 6))
plt.bar(daily_mineral.index.astype(str), daily_mineral.values, color='steelblue')
plt.title('6月份每日矿粉货运量趋势')
plt.xlabel('日期')
plt.ylabel('货运量(吨)')
plt.xticks(rotation=45)
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.tight_layout()
plt.savefig('output/daily_mineral_transport.png', dpi=300)
plt.close()

# 任务b: 水泥货运量日趋势
june_cement = data[(data['创建时间'].dt.month == 6) & (data['货品'] == '水泥')]
daily_cement = june_cement.groupby(june_cement['创建时间'].dt.date)['净重'].sum()
plt.figure(figsize=(12, 6))
plt.bar(daily_cement.index.astype(str), daily_cement.values, color='orange')
plt.title('6月份每日水泥货运量趋势')
plt.xlabel('日期')
plt.ylabel('货运量(吨)')
plt.xticks(rotation=45)
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.tight_layout()
plt.savefig('output/daily_cement_transport.png', dpi=300)
plt.close()

# 任务c: 客户货运需求量
customer_demand = data[data['创建时间'].dt.month == 6].groupby('客户')['净重'].sum().sort_values(ascending=False)
customer_demand.to_csv('output/customer_demand_ranking.csv', encoding='utf-8-sig')

# 任务d: 发货地发货总量
location_total = data[data['创建时间'].dt.month == 6].groupby('发货地')['净重'].sum()
plt.figure(figsize=(12, 6))
location_total.plot(kind='pie', autopct='%1.1f%%', startangle=90)
plt.title('6月份各发货地发货总量占比')
plt.ylabel('')
plt.tight_layout()
plt.savefig('output/location_distribution.png', dpi=300)
plt.close()

# 任务e: 车牌号货运量
vehicle_total = data[data['创建时间'].dt.month == 6].groupby('车辆')['净重'].sum().sort_values(ascending=False)
vehicle_total.to_csv('output/vehicle_ranking.csv', encoding='utf-8-sig')

print('所有分析已完成，结果保存在output目录下')